package com.lss.loginregister.util;

/**
 * 字符串处理工具类（静态工具类设计）
 * <p>遵循规范：不可实例化、final类、静态方法、参数校验、文档注释</p>
 * @see <a href="https://developer.aliyun.com/article/1554382">工具类设计原则[1](@ref)</a>
 * @see <a href="https://wenku.csdn.net/answer/fuwjyw5v3g">静态工具类格式[3](@ref)</a>
 */
public final class StringUtils {

    // 私有构造方法 + 异常抛出：禁止实例化
    private StringUtils() {
        throw new AssertionError("Cannot instantiate utility class!");
    }

    /**
     * 检查字符串是否为空（null或空字符串）
     * @param str 待检查字符串
     * @return 为空返回true，否则false
     */
    public static boolean isEmpty(final String str) {
        return str == null || str.isEmpty(); // 无状态操作[5](@ref)
    }

    /**
     * 反转字符串（线程安全：无共享状态）
     * @param input 原始字符串
     * @return 反转后的字符串（若输入为null则返回null）
     */
    public static String reverse(final String input) {
        if (input == null) return null;
        return new StringBuilder(input).reverse().toString(); // 局部变量保证线程安全[6](@ref)
    }

    /**
     * 将下划线命名转为驼峰命名（e.g., "user_name" -> "userName"）
     * @param str 下划线格式字符串
     * @return 驼峰格式字符串
     * @throws IllegalArgumentException 若输入为null或空[1](@ref)
     */
    public static String toCamelCase(final String str) {
        if (isEmpty(str)) throw new IllegalArgumentException("Input cannot be empty");
        
        final String[] parts = str.split("_");
        final StringBuilder result = new StringBuilder(parts[0]);
        for (int i = 1; i < parts.length; i++) {
            result.append(parts[i].substring(0, 1).toUpperCase())
                  .append(parts[i].substring(1).toLowerCase());
        }
        return result.toString();
    }

    /**
     * 截断字符串并添加省略号（超长时）
     * @param str 原始字符串
     * @param maxLength 最大长度（含省略号）
     * @return 截断后的字符串
     */
    public static String truncateWithEllipsis(final String str, final int maxLength) {
        if (isEmpty(str) || maxLength <= 3) return str;
        return str.length() > maxLength 
            ? str.substring(0, maxLength - 3) + "..." 
            : str;
    }
}